/**
 * 扫描器
 */
export default class Scanner {
    constructor(templateStr) {
        this.templateStr = templateStr
        // 初始化扫描位
        this.pos = 0

        // 初始化模板字符串尾巴
        this.tail = this.templateStr        
    }
    // 用来扫描模板字符串
    scan (tag) {
        if (this.tail.indexOf(tag) == 0) {
            this.pos += tag.length
            this.tail = this.templateStr.substring(this.pos)
        }
    }

    // 让指针进行扫描，直到遇见制指定内容结束，并且能够返回结束之前路过的文字
    scanUtil (stopTag) {
        let pos_start = this.pos // 记录每次循环的开始位置
        while(!this.endOfString() && this.tail.indexOf(stopTag) != 0) {
            this.pos++
            // 将尾巴更新为从当前指针这个字符开始往后的整体模板字符串
            this.tail = this.templateStr.substring(this.pos)
        }
        return this.templateStr.substring(pos_start, this.pos)
    }

    // 判断指针是否已经到了扫描的模板字符串的末尾 end of string
    // 当指针位置超过或等于模板字符串，则返回false
    endOfString() {
        return this.pos >= this.templateStr.length
    }
}